lib.use(['element', 'form','laydate','table','searchInput','btnProp','tablePlug'], function () {
    var layer = layui.layer;
    var form = layui.form;
    var laydate = layui.laydate;
    var searchInput = layui.searchInput;
    var btnProp = layui.btnProp;
    var formForm = layui.Form('formForm');
    var table = layui.table;
    var salePurchaseLineTableObj;
    var reqUrl;
    var id =common.util.getParam("id");


    //各种控件初始化
    initControl();

    //表单提交方法
    form.on('submit(addFormSubmitFilter)', formSubmit);


    var tableConfig={
        elem: '#salePurchaseLineTable'
        ,toolbar: '#toolbar'
        ,primaryKey: 'id'
        //,where: {orderId:1}
        ,even: true
        , cols: [[
            ,{ field: 'id',  hide: true }
            ,{ field: 'purchaseId', hide: true}
            ,{ title: '商品id', field: 'goodsId', hide: true}
            ,{type:'checkbox',rowspan:2}
            ,{type: 'numbers', title: '编号',rowspan:2 }
            ,{ title: '商品信息',colspan:8,align:'center'}
            ,{ title: '基本数量信息',colspan:3,align:'center'}
            ,{ title: '库存数量信息',colspan:4,align:'center'}
            ,{ title: '辅助数量信息',colspan:4,align:'center'}
            ,{ title: '备注', field: 'remark', event: 'setRemark',edit: 'text',rowspan:2 }
        ],[

             { title: '商品编码', field: 'goodsCode',}
            ,{ title: '商品名称', field: 'goodsName',}
            ,{ title: '商品型号', field: 'goodsModel',}
            ,{ title: '商品规格', field: 'goodsSpec',}
            ,{ title: '商品单价', field: 'goodsPrice', event: 'setGoodsPrice',edit: 'number'}
            ,{ title: '商品金额', field: 'goodsAmount',}
            ,{ title: '商品挂牌价', field: 'goodsListPrice'}
            ,{ title: '商品折扣', field: 'goodsDiscount',  edit: 'number',must:true}

            ,{ title: '基础数量', field: 'baseNum',}
            ,{ title: '基础单位', field: 'baseUomName',}
            ,{ title: '已入库', field: 'inBaseNum',}

            ,{ title: '库存数量', field: 'qtyNum', event: 'setQtyNum',edit: 'number'}
            ,{ title: '已入库', field: 'inQtyNum',}
            ,{ title: '计量单位', field: 'qtyUomName',}
            ,{ title: '件换算', field: 'converUnit1',}

            ,{ title: '辅助数量', field: 'auxNum', event: 'setAuxNum',edit: 'number'}
            ,{ title: '已入库', field: 'inAuxNum',}
            ,{ title: '计量单位', field: 'auxUomName',}
            ,{ title: '片换算', field: 'converUnit2',}
        ]]
    };
    table.set(common.layui.table.config());
    // 渲染从表表格
    salePurchaseLineTableObj = table.render(tableConfig)
    //明细添加按钮
    btnProp.render($.extend(BASE_GOODS_CONFIG_MULTIPLE,{
        dst: '#add',
        done:function(ck){
            addRowLine(ck.data);
        }
    }));
    //头工具栏事件
    table.on('toolbar(salePurchaseLineTableFilter)', function(obj){
        var checkStatus = table.checkStatus(obj.config.id);
        if(obj.event=='del'){
            delLine(table.checkStatus('salePurchaseLineTable'))
        }

    })

    // 监听编辑如果商品数量为非正整数时默认为1 并且弹出提示信息并且重新获得焦点等待输入
    table.on('edit(salePurchaseLineTableFilter)', rowEditFun);



    /**
     * 页面加载完成调用方法
     * 初始化方法可以写在这里
     */
    (function () {
        id?loadFormData(id):addInit();
    })();


//=====================================================各种自定义方法==========================================================


    /**
     * 页面控件初始化
     */
    function initControl() {

        //初始化日期控件


        //供应商名称弹出窗口
        searchInput.render($.extend(BASE_SUPPLIER_CONFIG_SINGLE,{
            dst: '#supplierNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                        supplierId:datas[0].id,
                        supplierName:datas[0].supplierName
                    }
                form.val('formForm',data);
            }
        }));
            //采购员名称弹出窗口
        searchInput.render($.extend(SYS_USER_CONFIG_SINGLE,{
            dst: '#guideNameSearchInput',
            done:function (obj,nextObj,datas) {
                var data={
                        guideId:datas[0].id,
                        guideName:datas[0].userName
                    }
                form.val('formForm',data);
            }
        }));

        //填冲下拉框数据字典
        //<select name="dbType" dist-name="sys.Ent_DbTypeEnum" config='{"data": [{"value": "全部","key": "0","index":"2"}],"selectedIndex": "1"}'></select>
        //config:{
        //    data:{[                 自定义下拉框数据
        //          value:'全部',      显示文字
        //          key:0,            值
        //          index:1           当前值需要插入位置(累加完自定义数据后再从下标从0计算)
        //          ]},
        //    selectedIndex:1         当前下拉框默然选中位置（下标从0计算)
        // }
        formForm.selectRender();

        /**
         * Form表单校验
         */
        form.verify({
               /* purchaseNo: function(value, item){
                if(!value){
                    return '单据编码不能为空';
                }
            },*/
            supplierName: function(value, item){
                if(!value){
                    return '供应商名称不能为空';
                }
            },
            guideName: function(value, item){
                if(!value){
                    return '采购员名称不能为空';
                }
            },
        });
    }

    function formSubmit(data) {
        if(table.cache['salePurchaseLineTable'].length==0){
            common.util.error("采购订单明细数据不能为空");
            return false;
        }
        if(!common.layui.table.verify(table,tableConfig)){
            return false;
        }
        var param = formForm.getData();
        param.purchaseLineEntityList=table.cache['salePurchaseLineTable'];
        param=beforeSave(param);
        console.log(param)
        common.ajax.post(reqUrl, param, function (resp) {
             afterSave(resp);
             common.util.alert('操作成功', function () {
                    common.util.returnWindow('purchaseHeadList.html',param)
             })
        })
        return false;
    }
    /**
     * 删除明细行
     * @param obj
     */
    function delLine(obj) {
        // 获得当前选中的，不管它的状态是什么？只要是选中的都会获得
        var checkedIds;
        if (salePurchaseLineTableObj.config.checkStatus) {
            // 开启了复选状态记忆
            checkedIds = tablePlug.tableCheck.getChecked(salePurchaseLineTableObj.config.id);
        } else {
            // 不开启
            checkedIds = table.checkStatus(salePurchaseLineTableObj.config.id).data;
        }
        if(checkedIds.length==0)return;
        layer.confirm('确认删除!', function(index){
            tablePlug.del(salePurchaseLineTableObj.config.id, checkedIds);
            layer.close(index);
            layer.msg('删除成功！', {icon: 1});
        });
    }




    /**
     * 明细行编辑事件
     * @param obj
     */
    function rowEditFun(obj) {
        var that = this;
        var converData=busCommon.conver(obj.data);
        var data={baseNum:common.util.toFixed(converData.baseNum),goodsAmount:common.util.toFixed(converData.baseNum*converData.goodsPrice-(converData.goodsDiscount||0))};
        console.log(data);
        obj.update(data);
        /*
        var that = this;
        var converData=busCommon.conver(obj.data);
        var data={baseNum:converData.baseNum,goodsAmount:converData.baseNum*converData.goodsPrice-converData.goodsDiscount};
        console.log(data);
        obj.update(data);

        */

    }

    /**
     * 明细行添加后调用方法
     * @param datas
     */
    function addRowLine(_datas) {
        var newDatas=[];
        $.each(_datas,function () {
            this.baseNum=0;
            //属性更换
            this.goodsPrice=this.listPrice;
            this.goodsListPrice=this.listPrice
            this.goodsAmount=0;
            this.goodsId=this.id;

            /*
            this.goodsPrice=this.listPrice;
            this.goodsNum=1;
            this.goodsPrice=1;
            this.goodsDiscount=0;
            this.goodsAmount=0;
            this.goodsId=this.id;
            */
            newDatas.push(this)
        })
        var config=
            {
                table:table,
                tableObj:salePurchaseLineTableObj,
                fromPk: "goodsId",
                datas:newDatas,
                done: function (obj,newObj) {
                    //obj.goodsNum1+=newObj.goodsNum1;
                    return obj;
                }
            }
        common.layui.table.addRows(config);
    }
    /**
     * 编辑时加载数据
     */
    function loadFormData(id) {
        common.ajax.get('/pos/purchaseHead/info/'+id, {}, function (resp) {
            var data=afterLoadFormData(resp.purchaseHead);
            formForm.setData(updateInit(data));

            common.layui.table.get('salePurchaseLineTable').load(data.purchaseLineEntityList)

        });
    }

    /**
     * 编辑时加载数据
     */
    function afterLoadFormData(purchaseHead) {
        //状态特殊业务时对操作按钮的禁用
        if(purchaseHead.purchaseState==2){
            salePurchaseLineTableObj = table.render(common.layui.table.readOnly(tableConfig));
            common.util.disabledBtnInput("#returnBtn");
        }
        return purchaseHead;

    }

    /**
     * 新增调用方法
     *
     */
    function addInit() {
        //新增
        reqUrl='/pos/purchaseHead/save';
        //设置新增初始值
        var defVal={
            title:1,
            isValid:1,
            purchaseDate:common.util.getDate()
            //orderDate:common.util.getDate()
        }
        formForm.setData(defVal);
        $(".disabled-row").hide();
    }

    /**
     * 修改调用方法
     * @param data 当前对像参数
     * @returns {*}
     */
    function updateInit(data) {
        reqUrl='/pos/purchaseHead/update';
        //更新时的其它操作
        return data
    }


    /**
     * 保存前调用方法
     * @param param
     * @returns {*}
     */
    function beforeSave(data) {
        //保存前的其它操作
        return data;
    }
    /**
     * 保存后调用方法
     */
    function afterSave(data) {
        //保存后的其它操作
    }
});
